package com.generatortest;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.LikeTable;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

// 生成的表名 sys_organization
public class GeneratorApp {

    public static void main(String[] args) {

        // 代码生成器
        AutoGenerator autoGenerator = new AutoGenerator();

        // 全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        // 代码生成路径                    获得当前项目路径
        globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
        // 作者
        globalConfig.setAuthor("chenXi");
        // 生成后打开文件夹
        globalConfig.setOpen(false);
        // 生成swagger注解
        globalConfig.setSwagger2(false);
        // 生成XML resultMap映射所有的字段
        globalConfig.setBaseResultMap(true);
        // 重复生成同名覆盖掉
        globalConfig.setFileOverride(true);
        // 时间
        globalConfig.setDateType(DateType.ONLY_DATE);
        // 生成pojo时命名 直接表名 %s=表名
        globalConfig.setEntityName("%s");
        // mapper接口名 DAO层
        globalConfig.setMapperName("%sMapper");
        // xml文件名 xml
        globalConfig.setXmlName("%sMapper");
        // service文件名 service层
        globalConfig.setServiceName("%sService");
        // impl命名
        globalConfig.setServiceImplName("%sServiceImpl");
        // 设置配置到代码生成器中
        autoGenerator.setGlobalConfig(globalConfig);

        // 数据源
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/byteLuckTest?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8");
        dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("root");
        autoGenerator.setDataSource(dataSourceConfig);

        // 包配置
        PackageConfig packageConfig = new PackageConfig();
        // 模块名
        packageConfig.setModuleName("sys");
        // 生成的包名   会组合成com.generatortest.sys
        packageConfig.setParent("com.generatortest");
        autoGenerator.setPackageInfo(packageConfig);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        // 表名的生成策略  下划线转驼峰 role_id ->RoleId
        strategy.setNaming(NamingStrategy.underline_to_camel);
        // 列名生成策略   下划线转驼峰
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        // 设置父类实体
        // strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置");
        // 支持lombok
        strategy.setEntityLombokModel(true);
        // 是否rest风格
        strategy.setRestControllerStyle(true);
        // controller的公共父类设置
        // strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置");
        // 写于父类中的公共字段
        // strategy.setSuperEntityColumns("id");
        // 要生成的表名 多个则逗号分割
        // strategy.setInclude("sys_role");
        //根据sys_前缀生成
         strategy.setLikeTable(new LikeTable("sys_"));
        // 设置true 则生成为requestMapping(/sys/sys_role)      false则生成requestMapping(/sys/sysRole)
        strategy.setControllerMappingHyphenStyle(false);
        // 设置表替换前缀  表sys_role生成的时候 去掉sys_前缀
        strategy.setTablePrefix("sys_");
        autoGenerator.setStrategy(strategy);

        // 运行生成
        autoGenerator.execute();

    }
}
